package br.com.salao.model;

import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;

import org.apache.log4j.Logger;

import br.com.salao.entity.Agendamento;
import br.com.salao.session.AgendamentoBase;
import br.com.salao.util.Utils;

public class AgendamentoModel {

	private Logger logger =  Logger.getLogger(AgendamentoModel.class.getName());

	public List<Agendamento> buscarAgendamentosPendentesPorUsuario(int idUsuario, Date data) throws Exception{

		try {	
			AgendamentoBase agendamentoBase = getBean();
			return agendamentoBase.buscarAgendamentosPendentesPorUsuario(idUsuario, data);
		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage() + "\n");
			sb.append(e.getStackTrace());
			logger.error(sb.toString(),e);

			return null;
		}
	}

	public List<Agendamento> buscarAgendamentos(int idEstabelecimento, Date data){

		try {	
			AgendamentoBase agendamentoBase = getBean();
			return agendamentoBase.buscarAgendamentos(idEstabelecimento, data);

		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage());
			logger.error(sb.toString(),e);

			return null;
		}		
	}

	public List<Agendamento> buscarAgendamentosConcluidosPorUsuario(int idEstabelecimento, Date data){

		try {	
			AgendamentoBase agendamentoBase = getBean();		
			return agendamentoBase.buscarAgendamentosConcluidosPorUsuario(idEstabelecimento, data);

		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage() + "\n");
			sb.append(e.getStackTrace());
			logger.error(sb.toString(),e);

			return null;
		}	
	}	

	public Agendamento buscar(int idAgendamento) {

		try {	
			AgendamentoBase agendamentoBase = getBean();
			return agendamentoBase.buscar(idAgendamento);
		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage() + "\n");
			sb.append(e.getStackTrace());
			logger.error(sb.toString(),e);

			return null;
		}	
	}

	public List<Agendamento> buscarAgendamentosPorIdUsuario(int idUsuario){

		try {	
			AgendamentoBase agendamentoBase = getBean();	
			return agendamentoBase.buscarAgendamentoPorUsuario(idUsuario);
			
		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage() + "\n");
			sb.append(e.getStackTrace());
			logger.error(sb.toString(),e);

			return null;
		}
	}

	public List<Agendamento> buscarAgendamentosCanceladosPorUsuario(int idUsuario){


		try {	
			AgendamentoBase agendamentoBase = getBean();	
			return agendamentoBase.buscarAgendamentosCanceladosPorUsuario(idUsuario);

		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getStackTrace());
			logger.error(sb.toString(),e);

			return null;
		}
	}

	public Agendamento inserir(Agendamento agendamento) throws Exception{

		try {	
			AgendamentoBase agendamentoBase = getBean();	
			return agendamentoBase.inserir(agendamento);

		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage());
			sb.append(e.getCause());
			logger.error(sb.toString(),e);

			throw e;
		}
	}

	public Agendamento update(Agendamento agendamento){

		try {	
			AgendamentoBase agendamentoBase = getBean();	
			return agendamentoBase.update(agendamento);

		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getStackTrace());
			logger.error(sb.toString(),e);

			return null;
		}
	}

	public List<Agendamento> buscarAgendamentoPorFuncionario(int idUsuario) throws Exception{

		try {	
			AgendamentoBase agendamentoBase = getBean();	
			return agendamentoBase.buscarAgendamentoPorFuncionario(idUsuario);

		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage() + "\n");
			sb.append(e.getStackTrace());
			logger.error(sb.toString(),e);

			throw e;
		}
	}
	
    public AgendamentoBase getBean() throws Exception {
    	
        Properties prop = Utils.getProperties();     
        Context ctx = new InitialContext(prop); 
        Object ref = ctx.lookup(prop.getProperty("AGENDAMENTO_LOOKUP"));       
      
        return (AgendamentoBase)PortableRemoteObject.narrow(ref, AgendamentoBase.class);
    }
}
